package jp.fsoriented.toishi.data;

import java.util.Comparator;

/**
 * Verseをみことば順でソートするコンパレータ
 * 
 */
public class VerseLocationComparator implements Comparator<Verse> {

	@Override
	public int compare(Verse lhs, Verse rhs) {
		// lhsが手前なら負、そうでなければ正
		int position = compareVersePtr(lhs.position, rhs.position);
		if (position == 0) {
			if ((!lhs.isRange) || (!rhs.isRange)) {
				if ((!lhs.isRange) && (!rhs.isRange)) {
					// まったく同じ
					return 0;
				} else if (lhs.isRange) {
					// 範囲のほうが後になるようにする
					return 1;
				} else {
					return -1;
				}
			}
			// 両方範囲のときは、終点を比較
			return compareVersePtr(lhs.toLocation, rhs.toLocation);
		}
		return position;
	}

	/**
	 * 二つのみことば箇所を比較する
	 * 
	 * @param lhs
	 * @param rhs
	 * @return
	 */
	private int compareVersePtr(VersePtr lhs, VersePtr rhs) {
		int book = lhs.book - rhs.book;
		if (book == 0) {
			int chapter = lhs.chapter - rhs.chapter;
			if (chapter == 0) {
				int verse = lhs.verse - rhs.verse;
				return verse;
			} else {
				return chapter;
			}
		} else {
			return book;
		}
	}
}
